package httpclient

import (
	"encoding/json"
	"encoding/xml"
	"io"
	"net/http"
)

// Response 表示 HTTP 响应
type Response struct {
	*http.Response
}

// Bytes 读取响应体为字节切片
func (r *Response) Bytes() ([]byte, error) {
	defer r.Body.Close()
	return io.ReadAll(r.Body)
}

// String 读取响应体为字符串
func (r *Response) String() (string, error) {
	bytes, err := r.Bytes()
	if err != nil {
		return "", err
	}
	return string(bytes), nil
}

// JSON 将响应体解析为 JSON
func (r *Response) JSON(v interface{}) error {
	defer r.Body.Close()
	return json.NewDecoder(r.Body).Decode(v)
}

// XML 将响应体解析为 XML
func (r *Response) XML(v interface{}) error {
	defer r.Body.Close()
	return xml.NewDecoder(r.Body).Decode(v)
}

// Save 保存响应体到文件
func (r *Response) Save(filename string) error {
	defer r.Body.Close()
	// TODO: 实现文件保存逻辑
	return nil
}

// IsSuccess 检查响应是否成功
func (r *Response) IsSuccess() bool {
	return r.StatusCode >= 200 && r.StatusCode < 300
}

// IsError 检查响应是否是错误
func (r *Response) IsError() bool {
	return r.StatusCode >= 400
}

// IsClientError 检查是否是客户端错误
func (r *Response) IsClientError() bool {
	return r.StatusCode >= 400 && r.StatusCode < 500
}

// IsServerError 检查是否是服务器错误
func (r *Response) IsServerError() bool {
	return r.StatusCode >= 500
}
